package com.sxj.corejava.code08_常用类.包装类;


/**
 * @author 石小俊
 * @date 2024年04月13日 10:40
 */
public class Test01_定义方式 {
    public static void main(String[] args) {
        // 对于基本数据类型而且,其不符合面向对象的特征
        // int i = 0;
        // 为了使得基本数据类型具有面向对象的特征,引出了包装类
        // 每一个基本数据类型都有一个预支对应的包装类
        // 包装类具有面向对象的特征,也属于引用数据类型
        // 因此,其存储在堆中
        // 定义方式:new Xxxx(基本数据类型值)
        Integer i = new Integer(10);
        byte b = 10;
        Byte b2 = new Byte(b);
        Byte b3 = new Byte(b);
        System.out.println(b3.equals(b2));

        Long l = new Long(10L);

        Boolean flag = new Boolean("admin");
        System.out.println(flag);

        Integer i2 = Integer.valueOf(100);
        Integer i3 = Integer.valueOf("100");
        System.out.println(i2);
        System.out.println(i3);
        System.out.println(i2 == i3);   // true

        Integer i4 = Integer.valueOf(1000);
        Integer i5 = Integer.valueOf("1000");
        System.out.println(i4 == i5); // false

        // 上述两种比较,发现值为100的时候相等,1000的时候不等
        // 说明100的时候是同一个内存地址,而1000的时候地址不同
        // 查询源码
//        if (i >= IntegerCache.low && i <= IntegerCache.high)
//            return IntegerCache.cache[i + (-IntegerCache.low)];
//        return new Integer(i);
        // 此时发现当i的值在[-128,127]时并没有创建新的对象
        // 而超出范围时创建了新的对象
        Integer i6 = Integer.valueOf(128);
        Integer i7 = Integer.valueOf("128");
        System.out.println(i6 == i7);
    }
}
